<?php
class UserBookings extends CI_Controller
{
	function __construct()
	{
		parent::__construct();
		$this->load->library('form_validation');
		$this->load->helper(array('url','form','security','html'));
		$this->load->helper('date');	
	}

	function index()
	{	

		$userID = $this->session->userdata('UserId');
		//kolla att användaren är inloggad.		
		if($userID != NULL)
		{
			//Kod som körs om användaren är inloggad.	
			$data['title']='Dina bokningar';
			$data['online']=''; 
			
			$allBookings = $this->_getBookings($userID);

			$data['allBookings'] = $allBookings;
			$data['cssData']='Bookings.css';
			$this->load->view('global/view_master_header',$data);
			$this->load->view('user/view_userbookings', $data);
			$this->load->view('global/view_master_footer');	
				
			
			
		}
		
		else
		{
			//Kod som köprs om användaren inte är inloggad.
			$data['label']='';
			$data['message']='Du måste logga in för att visa sidan.';
			$data['link']=anchor('user/login','Logga in'); 
			$this->load->view('global/view_master_header',$data);
			$this->load->view('global/view_redirect', $data);
			$this->load->view('global/view_master_footer');	
		}
		
		
		
	}
	
	//Hämtar alla bokningar för en användare.
	//Kan endast nås från funktioner i controllern.
	private function _getBookings($id)
	{
		$this->load->model('userbookings_model');
		
		$theUsersBookings = $this->userbookings_model->getTheBookings($id);

		if ($theUsersBookings->num_rows()>=1)
		{	
			//laddar modellen för att kunna hämta bilinformation.
			$this->load->model('userbookings_model');
			
			foreach ($theUsersBookings->result_array() as $row)
			{
				$aBooking['bookingID'] = $row['ID'];
			    $aBooking['startDate'] = $row['StartTid'];
			    $aBooking['endDate']= 	$row['SlutTid'];
			    $aBooking['totalPrice'] = $row['totalPrice'];
				$aBooking['ocr']=$row['ocrNummer'];
				$aBooking['due']=$row['ForFalloDatum'];
				$aBooking['isPayed'] = $row['betald'];
			
		
				$aBooking['carInfo'] = $this->userbookings_model->getCarName($row['BilID']);
				
				$possibleToCancel = $this->_cancelBookingAccepted($row['StartTid']);
				$aBooking['possibleToCancel'] = $possibleToCancel;
				
				
				$allBookings[] = $aBooking;
			}
			

			return $allBookings;
		}
		
		else
		{
			return FALSE;
		}
	}
	
	
	function getOneBooking($id)
	{
		//Kollar att användaren är inloggad.
		if($this->session->userdata('UserId')==TRUE)
		{
			//kod som körs om användaren är inloggad.
			
			$this->load->model('userbookings_model');
			$userID = $this->session->userdata('UserId');
			$theBooking = $this->userbookings_model->getBookingFromID($id, $userID);
			
			//kollar så att det är använaderns bokning och att den får tasbort.
			if($theBooking && $this->_cancelBookingAccepted($theBooking->StartTid))
			{
				$this->load->model('UserBookings_model');
				$theCar = $this->UserBookings_model->getCarName($theBooking->BilID);
				
				$data['online']=''; 
				$data['title']='Avbokning';
				$data['cssData']='Bookings.css';			
				$data['booking'] = $theBooking;
				$data['theCar'] = $theCar;
				
				$this->load->view('global/view_master_header',$data);
				$this->load->view('user/view_user_mypages_menu');
				$this->load->view('user/view_cancelBooking', $data);
				$this->load->view('global/view_master_footer');	
			}
			else
			{
				$data['label']='';
				$data['message']='Det gick inte att ta bort bokningen';
			
				$this->load->view('global/view_master_header',$data);
				$this->load->view('global/view_redirect', $data);
				$this->load->view('global/view_master_footer');	
			}	
		}
		else
		{
				$data['label']='';
				$data['message']='Du måste logga in för att visa sidan.';
				$data['link']=anchor('user/login','Logga in'); 
				$this->load->view('global/view_master_header',$data);
				$this->load->view('global/view_redirect', $data);
				$this->load->view('global/view_master_footer');	
		}	
		
	}
	
	function cancelBooking($id)
	{
		//Kollar att det är användaren som är inloggad.
		if($this->session->userdata('UserId'))
		{
			//kod som körs om användaren är inloggad.
			$this->load->model('userbookings_model');
			$userID = $this->session->userdata('UserId');
			
			$theBooking = $this->userbookings_model->getBookingFromID($id, $userID);
			//Kollar att användaren får ta bort bokningen.
			
			if($theBooking)
			{		
				$ableToCancel = $this->_cancelBookingAccepted($theBooking->StartTid);
			}
			else
			{
				$ableToCancel=FALSE;
			}
			
			if($ableToCancel == TRUE && $theBooking==TRUE)
			{
					$result = $this->userbookings_model->cancelBooking($id, $userID);
				
					$data['title']='Avbokning';	
					$data['message']='Avbokningen är nu genomförd.'; 
					$this->load->view('global/view_master_header',$data);
					$this->load->view('user/view_user_mypages_menu');
					$this->load->view('global/view_redirect', $data);
					$this->load->view('global/view_master_footer');
			}
			
			else
			{

					$data['title']='Avbokning';	
					$data['message']='Det går inte att genomföra en avbokning'; 
					$this->load->view('global/view_master_header',$data);
					$this->load->view('user/view_user_mypages_menu');
					$this->load->view('global/view_redirect', $data);
					$this->load->view('global/view_master_footer');
			}
		 }
		 else
		 {
		 		$data['label']='';
				$data['message']='Du måste logga in för att visa sidan.';
				$data['link']=anchor('user/login','Logga in'); 
				$this->load->view('global/view_master_header',$data);
				$this->load->view('global/view_redirect', $data);
				$this->load->view('global/view_master_footer');	
		 }
		
		
		
	}
	
	private function _cancelBookingAccepted($date)
	{
	// the variable for the number of days before the booking its accepted to cancel it
		$daysBeforeBooking = 10;
		
		$BookingDate = human_to_unix($date);
		$secs = (86400 * $daysBeforeBooking);
		
	 	$theLastBookingDate = $BookingDate - $secs;
		
	
		
	 	 if ($theLastBookingDate > now())
		 {
		 		return TRUE;
		 }
		 
		 else
		 {
		 	return FALSE;
		 }
		
	}
	

}

?>